package com.efast.cafe.portal.dao.api;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.efast.cafe.portal.bean.api.PortalApiModuleBean;
import com.efast.cafe.portal.bean.api.PortalApiObjectBean;
import com.efast.cafe.portal.bean.api.PortalApiObjectDto;
import com.efast.cafe.portal.bean.api.PortalApiObjectQueryBean;
import com.efast.cafe.portal.bean.api.PortalApiProjectDto;

/**
 * <p>
 * 接口
 * </p>
 * <p>
 * Table: portal_api_object - 对象定义
 * </p>
 *
 * @since ${.now}
 */

public interface PortalApiObjectDao {

	/**
	 * 新增object
	 * 
	 * @Date : 2017年8月11日
	 * @param portalApiObjectBean
	 * @return
	 */
	public int insertApiObject(PortalApiObjectBean portalApiObjectBean);

	/**
	 * 修改object
	 * 
	 * @Date : 2017年8月12日
	 * @param portalApiObjectBean
	 */
	public void updateApiObject(PortalApiObjectBean portalApiObjectBean);

	/**
	 * 删除object
	 * 
	 * @Date : 2017年8月12日
	 * @param portalApiObjectBean
	 */
	public void deleteApiObject(@Param(value="objId")Integer objId);

	/**
	 * 查询object详情
	 * 
	 * @Date : 2017年8月12日
	 * @param objId
	 * @return
	 */
	public PortalApiObjectBean queryObjByObjId(@Param(value="objId")Integer objId);

	/**
	 * 通过projectId查询项目下面所有的object
	 * 
	 * @Date : 2017年8月17日
	 * @param portalApiObjectDto
	 * @return
	 */
	// @PaginationControl(true)
	public List<PortalApiObjectDto> queryAllObjectByProId(PortalApiObjectDto portalApiObjectDto);

	/**
	 * 通过projectId查询项目下面所有的object数量
	 * 
	 * @Date : 2017年8月17日
	 * @param portalApiObjectDto
	 * @return
	 */
	public int queryCountObjectByProId(PortalApiObjectDto portalApiObjectDto);

	/**
	 * 通过moduleID查询模块下面的最新object信息
	 * 
	 * @Date : 2017年8月21日
	 * @param portalApiObjectDto
	 * @return
	 */
	// @PaginationControl(true)
	public List<PortalApiObjectDto> queryObjectByModuleId(PortalApiObjectDto portalApiObjectDto);

	/**
	 * 通过moduleID查询模块下面的object数量
	 * 
	 * @Date : 2017年8月21日
	 * @param portalApiObjectDto
	 * @return
	 */
	public int queryCountObjectByModuleId(PortalApiObjectDto portalApiObjectDto);

	/**
	 * 通过module的UUID 该模块所有版本
	 * 
	 * @Date : 2017年8月21日
	 * @param portalApiObjectDto
	 * @return
	 */
	public List<PortalApiObjectDto> queryObjectByObjcetUUid(PortalApiObjectDto portalApiObjectDto);

	/**
	 * 查询该模块下所有的object
	 * 
	 * @Date : 2017年8月22日
	 * @param portalApiObjectDto
	 * @return
	 */
	public List<PortalApiObjectBean> queryAllObjectByModulId(PortalApiProjectDto portalApiProjectDto);

	/**
	 * 发布升级模块的时候校验版本是否存在重复
	 * 
	 * @Date : 2017年8月22日
	 * @param apiModuleBean
	 * @return
	 */
	public int objectVersionIsExistWhenInsert(PortalApiObjectBean apiObjectBean);

	/**
	 * 修改模块时候校验版本是否存在重复
	 * 
	 * @Date : 2017年8月22日
	 * @param apiModuleBean
	 * @return
	 */
	public int objectVersionIsExistWhenUpdate(PortalApiObjectBean apiObjectBean);

	/**
	 * 复制模块的时候复制object
	 * 
	 * @Date : 2017年8月26日
	 * @param objId
	 * @return
	 */
	public int insertObjectById(PortalApiObjectBean apiObjectBean);

	/**
	 * 通过moduleId查询所有的object的id
	 * 
	 * @Date : 2017年8月29日
	 * @param moduleId
	 * @return
	 */
	public List<Integer> queryObjIds(@Param(value="moduleId")Integer moduleId);

	/**
	 * 校验object的系统标识符，在syetem下面唯一 校验object外键来源（模块，实体）字段是否存在
	 * 
	 * @Date : 2017年9月8日
	 * @param apiObjectBean
	 * @return
	 */
	public int objIndentifierCount(PortalApiObjectBean apiObjectBean);

	/**
	 * 校验object外键字段是否存在
	 * 
	 * @Date : 2017年9月8日
	 * @param apiObjectBean
	 * @return
	 */
	public int objReferProCount(PortalApiObjectBean apiObjectBean);

	/**
	 * 查询所有object
	 * 
	 * @Date : 2017年9月12日
	 * @param apiObjectDto
	 * @return
	 */
	// @PaginationControl(true)
	public List<PortalApiObjectDto> queryAllObjectList(PortalApiObjectQueryBean apiObjectQueryBean);

	/**
	 * 查询所有object数量
	 * 
	 * @Date : 2017年9月12日
	 * @param apiObjectDto
	 * @return
	 */
	public int queryAllObjectListCount(PortalApiObjectQueryBean apiObjectQueryBean);

	/**
	 *
	 * 校验tableName是否唯一
	 * 
	 * @Date : 2017年9月8日
	 * @param apiObjectBean
	 * @return
	 */
	public int objTableNameCount(PortalApiObjectBean apiObjectBean);
	
	
	// @PaginationControl(true)
	/**
	 * 查询对象通过系统Id
	 * @param apiObjectQueryBean
	 * @return
	 */
	public List<PortalApiObjectDto> queryAllObjectBySystemId(PortalApiObjectDto portalApiObjectDto);

	public void updateApiObjectLayout(PortalApiObjectDto portalApiObjectBean);

	
}
